#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdint.h>
#include<sys/timerfd.h>

int main()
{
    //int timerfd_create(int clockid, int flags);
    //CLOCK_MONOTONIC是一个时钟源选项，用于测量时间间隔，0表示阻塞操作

    //返回值是一个文件描述符，每隔一个超时时间，就会向timerfd写入一个8字节数据，
    //假设定时器设置的超时时间是3秒，那么我第3秒去读，读到的就是1，表示我从上一次读取数据超时了1次
    //假设我第30秒去读，读到的就是10，表示我从上一次读取数据超时了10次，然后我再隔3秒去读，读到的就是1，表示我从上一次读取数据超时了1次
    int timerfd=timerfd_create(CLOCK_MONOTONIC,0);
    if(timerfd<0)
    {
        perror("timerfd_create error\n");
        return -1;
    }

    //int timerfd_settime(int fd, int flags, struct itimerspec *new, struct itimerspec *old);
    //用于定义定时器的时间参数
    struct itimerspec itime;
    itime.it_value.tv_sec=1;//第一次超时时间是1s后
    itime.it_value.tv_nsec=0;
    itime.it_interval.tv_sec=1;//第一次超时后，每次超时的间隔为1s
    itime.it_interval.tv_nsec=0;
    timerfd_settime(timerfd,0,&itime,NULL);
    //sleep(5);
    while(1)
    {
        //sleep(3);
        uint64_t times; //8字节类型
        int ret=read(timerfd,&times,8);
        if(ret<0)
        {
            perror("read error\n");
            return -1;
        }
        printf("超时了，距离上一次超时了%ld次\n",times); 
    }
    close(timerfd);
    return 0;
}

